package com.zb.mapper;

import com.zb.view.ViewGoods;
import com.zb.vo.GoodsBoomSelectVo;
import com.zb.vo.GoodsSelectVo;
import com.zb.vo.OrderGoodsSelectVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Author WEN
 * @Date 2024/1/13 0013
 **/
@Repository
public interface ViewGoodsMapper {
    /**
     * 根据[商品ID] & [商品规格ID]查询
     * @param goodsIds 商品ID
     * @param goodsSpecIds 商品规格ID
     * @return
     */
    List<ViewGoods> getByGoodsIdsAndGoodsSpecIds(@Param("goodsIds") List<Long> goodsIds, @Param("goodsSpecIds") List<Long> goodsSpecIds);

    /**
     * 获取出入库商品
     * @param custAccId 商家ID
     * @param goodsType 商品类型：1-成品，2-配件
     * @param selectVo 商品搜索条件
     * @return
     */
    List<ViewGoods> getInOrOutStoreGoods(@Param("custAccId") Long custAccId, @Param("goodsType") Integer goodsType, @Param("selectVo") OrderGoodsSelectVo selectVo);

    /**
     * 获取出入库商品总记录数
     * @param custAccId 商家ID
     * @param goodsType 商品类型：1-成品，2-配件
     * @param selectVo 商品搜索条件
     * @return
     */
    long getInOrOutStoreGoodsCount(@Param("custAccId") Long custAccId, @Param("goodsType") Integer goodsType, @Param("selectVo") OrderGoodsSelectVo selectVo);

    /**
     * 获取商品导出Excel数据
     * @param custAccId 商家ID
     * @param goodsType 类型：1-成品，2-配件
     * @param selectVo 搜索对象
     * @return
     */
    List<ViewGoods> getGoodsExportExcel(@Param("custAccId") Long custAccId, @Param("goodsType") Integer goodsType, @Param("selectVo") GoodsSelectVo selectVo);

    /**
     * 获取商品导出Excel数据总数量
     * @param custAccId 商家ID
     * @param goodsType 类型：1-成品，2-配件
     * @param selectVo 搜索对象
     * @return
     */
    long getGoodsExportExcelCount(@Param("custAccId") Long custAccId, @Param("goodsType") Integer goodsType, @Param("selectVo") GoodsSelectVo selectVo);

    /**
     * 根据商家ID与商品类型获取商品信息
     * @param custAccId 商家ID
     * @param goodsType 类型：1-成品，2-配件
     * @return
     */
    List<ViewGoods> getByCustAccIdAndType(@Param("custAccId") Long custAccId, @Param("goodsType") Integer goodsType);

    /**
     * 根据商家ID查询商品信息
     * @param custAccId 商家ID
     * @param goodsType 商品类型：1-成品，2-配件
     * @return
     */
    List<ViewGoods> getGoodsExport(@Param("custAccId") Long custAccId, @Param("goodsType") Integer goodsType);

    /**
     * 根据[商品类型]&[商品ID]&[商品规格ID]
     * @param goodsType 商品类型：1-成品，2-配件
     * @param id 商品ID
     * @param specId 商品规格ID
     * @return
     */
    ViewGoods getByGoodsTypeAndGoodsIdAndGoodsSpecId(@Param("goodsType") Integer goodsType, @Param("id") Long id, @Param("specId") Long specId);

    /**
     * 获取工单报单产品
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    List<ViewGoods> getOrderProduct(@Param("custAccId") Long custAccId, @Param("selectVo") OrderGoodsSelectVo selectVo);

    /**
     * 获取工单报单产品总记录数
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    long getOrderProductCount(@Param("custAccId") Long custAccId, @Param("selectVo") OrderGoodsSelectVo selectVo);

    /**
     * 获取Boom关联的商品列表
     * @param custAccId 商家ID
     * @param goodsType 商品类型：1-成品，2-配件
     * @param id 产品ID，获取Boom关联时，排除自身
     * @param selectVo 搜索条件
     * @return
     */
    List<ViewGoods> getGoodsBoomList(@Param("custAccId") Long custAccId, @Param("goodsType") Integer goodsType, @Param("id") Long id, @Param("selectVo") GoodsBoomSelectVo selectVo);

    /**
     * 获取Boom关联的商品列表总记录数
     * @param custAccId 商家ID
     * @param goodsType 商品类型：1-成品，2-配件
     * @param id 产品ID，获取Boom关联时，排除自身
     * @param selectVo 搜索条件
     * @return
     */
    long getGoodsBoomListCount(@Param("custAccId") Long custAccId, @Param("goodsType") Integer goodsType, @Param("id") Long id, @Param("selectVo") GoodsBoomSelectVo selectVo);

    /**
     * 获取报单成品列表
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    List<ViewGoods> getOrderProductList(@Param("custAccId") Long custAccId, @Param("selectVo") OrderGoodsSelectVo selectVo);

    /**
     * 获取报单成品列表总记录数
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    long getOrderProductListCount(@Param("custAccId") Long custAccId, @Param("selectVo") OrderGoodsSelectVo selectVo);
}
